/* eslint-disable @typescript-eslint/no-explicit-any */
import {
  IGridState,
  ISearchCondField,
  MDCtrlLoadParams,
  IMDControlGroupState,
} from '@ibiz-template/runtime';

/**
 * @description odoo表格加载参数
 * @export
 * @interface OdooLoadParams
 * @extends {MDCtrlLoadParams}
 */
export interface OdooLoadParams extends MDCtrlLoadParams {
  /**
   * @description 附加查询条件
   * @type {ISearchCondField[]}
   * @memberof OdooLoadParams
   */
  searchconds?: ISearchCondField[];

  /**
   * @description 查询量
   * @type {number}
   * @memberof OdooLoadParams
   */
  size?: number;

  /**
   * @description 是否加载树数据
   * @type {boolean}
   * @memberof OdooLoadParams
   */
  isLoadTree?: boolean;

  /**
   * @description 是否为数据搜索（仅获取指定条件的数据）
   * @type {boolean}
   * @memberof OdooLoadParams
   */
  isSearch?: boolean;
}

/**
 * @description 分组数据
 * @export
 * @interface IGroupData
 * @extends {IApiMDControlGroupState}
 */
export interface IGroupData extends IMDControlGroupState {
  /**
   * @description 子数据
   * @type {IGroupData[]}
   * @memberof IGroupData
   */
  children: (IGroupData | IData)[];

  /**
   * @description 分组值
   * @type {string}
   * @memberof IGroupData
   */
  value?: string;

  /**
   * @description 是否有子数据
   * @type {boolean}
   * @memberof IGroupData
   */
  hasChildren: boolean;

  /**
   * @description 子数据数量
   * @type {number}
   * @memberof IGroupData
   */
  count: number;

  /**
   * @description 模拟主键
   * @type {string}
   * @memberof IGroupData
   */
  tempsrfkey: string;

  /**
   * @description 分组条件
   * @type {ISearchCondField[]}
   * @memberof IGroupData
   */
  searchconds: ISearchCondField[];

  /**
   * @description 层级
   * @type {number}
   * @memberof IGroupData
   */
  level: number;

  /**
   * @description 聚合值
   * @type {string}
   * @memberof IGroupData
   */
  [key: string]: any;
}

/**
 * @description Odoo表格状态
 * @export
 * @interface IOdooGridState
 * @extends {IGridState}
 */
export interface IOdooGridState extends IGridState {
  /**
   * @description 分组数据
   * @type {IGroupData[]}
   * @memberof IOdooGridState
   */
  groups: IGroupData[];

  /**
   * @description 启用分组
   * @type {boolean}
   * @memberof IOdooGridState
   */
  enableGroup: boolean;

  /**
   * @description 当前展开的数据集合
   * @type {IData[]}
   * @memberof IOdooGridState
   */
  expandItems: IData[];

  /**
   * @description 全选复选框是否选中(手动)
   * @type {boolean}
   * @memberof IOdooGridState
   */
  checkboxSelected: boolean;

  /**
   * @description 是否选中所有数据
   * @type {boolean}
   * @memberof IOdooGridState
   */
  selectAll: boolean;
}

/**
 * @description 多数据部件分组参数
 * @export
 * @interface IApiMDGroupParams
 */
export interface IApiMDGroupParams {
  /**
   * @description 分组属性标识
   * @type {string}
   * @memberof IApiMDGroupParams
   */
  groupFieldId: string;

  /**
   * @description 分组代码表标识
   * @type {string}
   * @memberof IApiMDGroupParams
   */
  groupCodeListId?: string;

  /**
   * @description 日期分组格式
   * @type {(('year' | 'quarter' | 'month' | 'week' | 'day')[])} (年 | 季度 | 月 | 周 | 天)
   * @memberof IApiMDGroupParams
   */
  dateFormat?: ('year' | 'quarter' | 'month' | 'week' | 'day')[];

  /**
   * @description 是否为自定义扩展属性
   * @type {boolean}
   * @memberof IApiMDGroupParams
   */
  extend?: boolean;
}
